package pe.gob.mininter.dirandro.vaadin.panel.mantenimiento;

import java.math.BigDecimal;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import pe.gob.mininter.dirandro.model.Distrito;
import pe.gob.mininter.dirandro.model.Entidad;
import pe.gob.mininter.dirandro.model.Opcion;
import pe.gob.mininter.dirandro.model.Valor;
import pe.gob.mininter.dirandro.service.EntidadService;
import pe.gob.mininter.dirandro.service.UbigeoService;
import pe.gob.mininter.dirandro.service.ValorService;
import pe.gob.mininter.dirandro.util.Constante;
import pe.gob.mininter.dirandro.vaadin.dialogs.AlertDialog;
import pe.gob.mininter.dirandro.vaadin.util.ComboBoxLOVS;
import pe.gob.mininter.dirandro.vaadin.util.DirandroComponent;
import pe.gob.mininter.dirandro.vaadin.util.Injector;

import com.vaadin.annotations.AutoGenerated;
import com.vaadin.data.Item;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
import com.vaadin.data.util.BeanItemContainer;
import com.vaadin.data.util.IndexedContainer;
import com.vaadin.event.FieldEvents.TextChangeEvent;
import com.vaadin.event.FieldEvents.TextChangeListener;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.Table;
import com.vaadin.ui.TextArea;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.AbstractSelect.Filtering;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;

public class PanelMantenEntidad extends DirandroComponent implements TextChangeListener, ClickListener{

	/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */

	@AutoGenerated
	private VerticalLayout mainLayout;

	@AutoGenerated
	private HorizontalLayout pnlEntidadContenido;

	@AutoGenerated
	private VerticalLayout pnlParametroContenido;

	@AutoGenerated
	private HorizontalLayout pnlBotonContenido;

	@AutoGenerated
	private Button btnEliminarEntidad;

	@AutoGenerated
	private Button btnCrearEntidad;

	@AutoGenerated
	private ComboBoxLOVS cmbEstadoEntidad;

	@AutoGenerated
	private TextField txtTelefonoEntidad;

	@AutoGenerated
	private TextArea txtADescripcionEntidad;

	@AutoGenerated
	private TextField txtDireccionEntidad;

	@AutoGenerated
	private ComboBox cmbDireccionEntidad;

	@AutoGenerated
	private TextField txtNombreEntidad;

	@AutoGenerated
	private ComboBoxLOVS cmbTipoEntidad;

	@AutoGenerated
	private Label lblEntidad;

	@AutoGenerated
	private VerticalLayout pnlTablaContenido;

	@AutoGenerated
	private VerticalLayout pnlTablaEntidad;

	@AutoGenerated
	private Table tblEntidad;

	@AutoGenerated
	private HorizontalLayout pnlFiltroTablaEntidad;

	@AutoGenerated
	private TextField txtFiltroTelefono;

	@AutoGenerated
	private TextField txtFiltroDireccion;

	@AutoGenerated
	private TextField txtFiltroDistrito;

	@AutoGenerated
	private TextField txtFiltroNombre;

	@AutoGenerated
	private TextField txtFiltroTipo;

	@AutoGenerated
	private Label lblFiltroEntidad;

	private static final long serialVersionUID = -397171381729562188L;
	
	protected static final Log logger = LogFactory.getLog(PanelMantenEntidad.class);
	
	private EntidadService entidadService;
	
	private ValorService valorService;
	
	private UbigeoService ubigeoService;
	
	private boolean flagNuevaEntidad;
	
	private Entidad entidad;
	
	private List<Distrito> lstDistritos;
	
	public PanelMantenEntidad(List<Opcion> acciones, String height) {
		super(acciones,height);
		entidadService = Injector.obtenerServicio(EntidadService.class);
		valorService = Injector.obtenerServicio(ValorService.class);
		ubigeoService = Injector.obtenerServicio(UbigeoService.class);
		buildMainLayout();
		setCompositionRoot(mainLayout);
		postConstruct();		
	}

	@Override
	public void postConstruct() {
		
		mainLayout.setStyleName("backColor");
		
		btnCrearEntidad.setIcon(Constante.ICONOS.SAVE);
		btnEliminarEntidad.setIcon(Constante.ICONOS.DELETE);
		
		habilitarEdicion(false);
		
		cmbEstadoEntidad.setInputPrompt("Estado");
		cmbTipoEntidad.setInputPrompt("Tipo o Clasificación");
		
		cmbEstadoEntidad.setCodigoLista(Constante.LISTA.CODIGO.ESTADO);
		cmbTipoEntidad.setCodigoLista(Constante.LISTA.CODIGO.ENTIDAD_TIPO);
		
		lstDistritos = ubigeoService.obtenerTodos();
		cmbDireccionEntidad.setContainerDataSource( new BeanItemContainer<Distrito>(Distrito.class, lstDistritos));
		cmbDireccionEntidad.setItemCaptionPropertyId("nombreCompleto");
		cmbDireccionEntidad.setFilteringMode(Filtering.FILTERINGMODE_CONTAINS);
		cmbDireccionEntidad.setInputPrompt("Distrito");
		
		txtFiltroTipo.setImmediate(true);
		txtFiltroNombre.setImmediate(true);
		txtFiltroDistrito.setImmediate(true);
		txtFiltroDireccion.setImmediate(true);
		txtFiltroTelefono.setImmediate(true);
		
		txtFiltroTipo.addListener((TextChangeListener)this);
		txtFiltroNombre.addListener((TextChangeListener)this);
		txtFiltroDistrito.addListener((TextChangeListener)this);
		txtFiltroDireccion.addListener((TextChangeListener)this);
		txtFiltroTelefono.addListener((TextChangeListener)this);
		
		tblEntidad.setSelectable(true);
		
		List<Entidad> entidades = entidadService.buscar(null);
		cargarEntidades(entidades);
		
		tblEntidad.setSelectable(true);
		tblEntidad.setImmediate(true);
		tblEntidad.setNullSelectionAllowed(true);
		tblEntidad.setNullSelectionItemId(null);
		
		tblEntidad.setSelectable(true);
		tblEntidad.setImmediate(true);
		tblEntidad.setNullSelectionAllowed(true);
		tblEntidad.setNullSelectionItemId(null);
		tblEntidad.setCacheRate(1);
		tblEntidad.addListener(new ValueChangeListener() {

			private static final long serialVersionUID = -6124596484581515359L;

			@Override
			public void valueChange(ValueChangeEvent event) {
				boolean esModoNuevo = tblEntidad.getValue() == null;
				limpiar();
				habilitarEdicion(!esModoNuevo);
				if(esModoNuevo){
					tblEntidad.setValue(null);
				}else{
					Item item = tblEntidad.getItem(tblEntidad.getValue());
					entidad = new Entidad();
					entidad.setId(Long.valueOf(item.getItemProperty("id").getValue().toString()));
					txtNombreEntidad.setValue(item.getItemProperty("nombre").getValue());
					txtDireccionEntidad.setValue(item.getItemProperty("direccion").getValue() != null ? item.getItemProperty("direccion").getValue().toString() : StringUtils.EMPTY);
					txtADescripcionEntidad.setValue(item.getItemProperty("descripcion").getValue() != null ? item.getItemProperty("descripcion").getValue().toString() : StringUtils.EMPTY);
					txtTelefonoEntidad.setValue(item.getItemProperty("telefono").getValue() != null ? item.getItemProperty("telefono").getValue().toString() : StringUtils.EMPTY);
					cmbDireccionEntidad.select((Distrito) item.getItemProperty("distrito").getValue());
					cmbTipoEntidad.select(new Valor((Long) item.getItemProperty("tipoEntidad.id").getValue()));
					cmbEstadoEntidad.select(new Valor((Long) item.getItemProperty("estado.id").getValue()));
				}
			}
		});
		
		btnCrearEntidad.addListener((ClickListener)this);
		btnEliminarEntidad.addListener((ClickListener)this);
		limpiar();
	}
	
	private void cargarEntidades(List<Entidad> lstEntidades){
		
		IndexedContainer container = new IndexedContainer();
		container.addContainerProperty("id", Long.class,  null);
		container.addContainerProperty("tipoEntidad.nombre", String.class, null);
		container.addContainerProperty("tipoEntidad.id", Long.class, null);
		container.addContainerProperty("estado.id", Long.class, null);
		container.addContainerProperty("nombre", String.class, null);
		container.addContainerProperty("descripcion", String.class, null);
		container.addContainerProperty("distrito.nombre", String.class, null);
		container.addContainerProperty("distrito.id", Long.class, null);
		container.addContainerProperty("distrito", Distrito.class, null);
		container.addContainerProperty("direccion", String.class, null);
		container.addContainerProperty("telefono", String.class, null);
		container.addContainerProperty("dirtepol", BigDecimal.class, null);
		container.addContainerProperty("efectivos", BigDecimal.class, null);
		
		tblEntidad.setContainerDataSource(container);
		tblEntidad.setVisibleColumns(new Object[]{"tipoEntidad.nombre","nombre","distrito.nombre", "direccion", "telefono"});
	
		tblEntidad.setColumnWidth("tipoEntidad.id", 100);
		tblEntidad.setColumnWidth("tipoEntidad.nombre", 75);
		tblEntidad.setColumnWidth("nombre", 150);
		tblEntidad.setColumnWidth("distrito.nombre", 130);
		tblEntidad.setColumnWidth("direccion", 100);
		tblEntidad.setColumnWidth("telefono", 100);
		
		tblEntidad.setColumnHeader("tipoEntidad.id", "tipoid");
		tblEntidad.setColumnHeader("tipoEntidad.nombre", "tipo");
		tblEntidad.setColumnHeader("nombre", "nombre");
		tblEntidad.setColumnHeader("distrito.nombre", "Distrito");
		tblEntidad.setColumnHeader("direccion", "Dirección");
		tblEntidad.setColumnHeader("telefono", "Teléfono");
		
		int con=1;
		for (Entidad entidad: lstEntidades){
			Item item = container.addItem(con++);
			item.getItemProperty("id").setValue(entidad.getId());
			item.getItemProperty("tipoEntidad.id").setValue(entidad.getTipo()!=null?entidad.getTipo().getId():0l);
			item.getItemProperty("tipoEntidad.nombre").setValue(entidad.getTipo()!=null?entidad.getTipo().getNombre():StringUtils.EMPTY);
			item.getItemProperty("estado.id").setValue(entidad.getEstado()!=null?entidad.getEstado().getId():0l);
			item.getItemProperty("nombre").setValue(entidad.getNombre());
			item.getItemProperty("distrito").setValue(entidad.getDistrito());
			item.getItemProperty("distrito.id").setValue(entidad.getDistrito() != null ? entidad.getDistrito().getId() : null);
			item.getItemProperty("distrito.nombre").setValue(entidad.getDistrito()!=null?entidad.getDistrito().getNombre():StringUtils.EMPTY);
			item.getItemProperty("dirtepol").setValue(entidad.getDirtepol());
			item.getItemProperty("telefono").setValue(entidad.getTelefono());
			item.getItemProperty("descripcion").setValue(entidad.getDescripcion());
			item.getItemProperty("direccion").setValue(entidad.getDireccion());
		}
	
	}
	
	@Override
	public void textChange(TextChangeEvent event) { 
		Entidad entidad = new Entidad();
		
		if(event.getSource().equals(txtFiltroTipo)){
			
			if(StringUtils.isNotBlank(event.getText())){
				Valor tipo = new Valor();
				tipo.setNombre(event.getText());
				entidad.setTipo(tipo);
			}
			
			if(StringUtils.isNotBlank(txtFiltroNombre.getValue().toString())){
				entidad.setNombre(txtFiltroNombre.getValue().toString());
			}
			
			if(event.getSource().equals(txtFiltroDistrito)){
				Distrito distrito = new Distrito();
				distrito.setNombre(txtFiltroDistrito.getValue().toString());	
				entidad.setDistrito(distrito);
			}
			
			if(StringUtils.isNotBlank(txtFiltroTelefono.getValue().toString())){
				entidad.setNombre(txtFiltroTelefono.getValue().toString());
			}
		}
		
		if(event.getSource().equals(txtFiltroNombre)){
			
			if(StringUtils.isNotBlank(txtFiltroTipo.getValue().toString())){
				Valor tipo = new Valor();
				tipo.setNombre(txtFiltroTipo.getValue().toString());
				entidad.setTipo(tipo);
			}
			
			if(StringUtils.isNotBlank(event.getText())){
				entidad.setNombre(event.getText());
			}
			
			if(StringUtils.isNotBlank(txtFiltroDistrito.getValue().toString())){
				Distrito distrito = new Distrito();
				distrito.setNombre(txtFiltroDistrito.getValue().toString());	
				entidad.setDistrito(distrito);
			}
			
			if(StringUtils.isNotBlank(txtFiltroTelefono.getValue().toString())){
				entidad.setNombre(txtFiltroTelefono.getValue().toString());
			}
		}
		
		if(event.getSource().equals(txtFiltroDistrito)){
			
			if(StringUtils.isNotBlank(txtFiltroTipo.getValue().toString())){
				Valor tipo = new Valor();
				tipo.setNombre(txtFiltroTipo.getValue().toString());
				entidad.setTipo(tipo);
			}
			
			if(StringUtils.isNotBlank(txtFiltroNombre.getValue().toString())){
				entidad.setNombre(txtFiltroNombre.getValue().toString());
			}
			
			if(StringUtils.isNotBlank(event.getText())){
				Distrito distrito = new Distrito();
				distrito.setNombre(event.getText());	
				entidad.setDistrito(distrito);
			}
			
			if(StringUtils.isNotBlank(txtFiltroTelefono.getValue().toString())){
				entidad.setNombre(txtFiltroTelefono.getValue().toString());
			}
		}
		
		if(event.getSource().equals(txtFiltroTelefono)){
			
			if(StringUtils.isNotBlank(txtFiltroTipo.getValue().toString())){
				Valor tipo = new Valor();
				tipo.setNombre(txtFiltroTipo.getValue().toString());
				entidad.setTipo(tipo);
			}
			
			if(StringUtils.isNotBlank(txtFiltroNombre.getValue().toString())){
				entidad.setNombre(txtFiltroNombre.getValue().toString());
			}
			
			if(StringUtils.isNotBlank(txtFiltroDistrito.getValue().toString())){
				Distrito distrito = new Distrito();
				distrito.setNombre(txtFiltroDistrito.getValue().toString());	
				entidad.setDistrito(distrito);
			}
			
			if(StringUtils.isNotBlank(event.getText())){
				entidad.setTelefono(event.getText());
			}
		}

		List<Entidad> entidades = entidadService.buscar(entidad);	
		cargarEntidades(entidades);
	}

	private void habilitarEdicion(boolean flag){
		flagNuevaEntidad = !flag;
		btnEliminarEntidad.setVisible(flag);
		if(flag){
			btnCrearEntidad.setCaption("Actualizar");
		}
		else{
			btnCrearEntidad.setCaption("Crear");
		}
	}
	
	@Override
	public void buttonClick(ClickEvent event) {
		if(event.getButton().equals(btnCrearEntidad)){
			StringBuilder sbContenido = new StringBuilder();
			entidad.setNombre(txtNombreEntidad.getValue().toString());
			entidad.setDescripcion(txtADescripcionEntidad.getValue().toString());
			entidad.setEstado((Valor) cmbEstadoEntidad.getValue());
			entidad.setTipo((Valor) cmbTipoEntidad.getValue());
			entidad.setDireccion(txtDireccionEntidad.getValue().toString());
			entidad.setDistrito((Distrito) cmbDireccionEntidad.getValue());
			entidad.setTelefono(txtTelefonoEntidad.getValue().toString());
			entidad.validar();
			if(flagNuevaEntidad){
				entidadService.crear(entidad);
				sbContenido.append("Entidad : ").append(entidad.getNombre()).append(" se ha "+ Constante.OPERACION.CREAR_REGISTRO+" satisfactoriamente.");
			}else{
				entidadService.actualizar(entidad);
				sbContenido.append("Entidad : ").append(entidad.getNombre()).append(" se ha "+ Constante.OPERACION.ACTUALIZAR_REGISTRO+" satisfactoriamente.");
			}
			AlertDialog alertDialog = new  AlertDialog("Entidad", sbContenido.toString(), "Aceptar", "400");
			getApplication().getMainWindow().addWindow(alertDialog);
			refrescar();
		}
		if(event.getButton().equals(btnEliminarEntidad)){
			entidadService.eliminarXId(entidad.getId());
			refrescar();
		}
	}
	
	private void refrescar(){
		habilitarEdicion(false);
		limpiar();
		List<Entidad> lstEntidades = entidadService.buscar(null);
		cargarEntidades(lstEntidades);
	}
	
	private void limpiar(){
		entidad= new Entidad();
		cmbTipoEntidad.select(null);
		txtNombreEntidad.setValue(StringUtils.EMPTY);
		txtADescripcionEntidad.setValue(StringUtils.EMPTY);
		txtDireccionEntidad.setValue(StringUtils.EMPTY);
		txtTelefonoEntidad.setValue(StringUtils.EMPTY);
		cmbEstadoEntidad.select(null);
		cmbDireccionEntidad.select(null);
		txtFiltroTipo.setValue(StringUtils.EMPTY);
		txtFiltroNombre.setValue(StringUtils.EMPTY);
		txtFiltroDistrito.setValue(StringUtils.EMPTY);
		txtFiltroDireccion.setValue(StringUtils.EMPTY);
		txtFiltroTelefono.setValue(StringUtils.EMPTY);
	}

	@AutoGenerated
	private VerticalLayout buildMainLayout() {
		// common part: create layout
		mainLayout = new VerticalLayout();
		mainLayout.setImmediate(false);
		mainLayout.setWidth("100%");
		mainLayout.setHeight("-1px");
		mainLayout.setMargin(true);
		
		// top-level component properties
		setWidth("100.0%");
		setHeight("-1px");
		
		// pnlEntidadContenido
		pnlEntidadContenido = buildPnlEntidadContenido();
		mainLayout.addComponent(pnlEntidadContenido);
		mainLayout
				.setComponentAlignment(pnlEntidadContenido, new Alignment(48));
		
		return mainLayout;
	}

	@AutoGenerated
	private HorizontalLayout buildPnlEntidadContenido() {
		// common part: create layout
		pnlEntidadContenido = new HorizontalLayout();
		pnlEntidadContenido.setStyleName("whiteBackGround");
		pnlEntidadContenido.setImmediate(false);
		pnlEntidadContenido.setWidth("-1px");
		pnlEntidadContenido.setHeight("-1px");
		pnlEntidadContenido.setMargin(true);
		pnlEntidadContenido.setSpacing(true);
		
		// pnlTablaContenido
		pnlTablaContenido = buildPnlTablaContenido();
		pnlEntidadContenido.addComponent(pnlTablaContenido);
		
		// pnlParametroContenido
		pnlParametroContenido = buildPnlParametroContenido();
		pnlEntidadContenido.addComponent(pnlParametroContenido);
		
		return pnlEntidadContenido;
	}

	@AutoGenerated
	private VerticalLayout buildPnlTablaContenido() {
		// common part: create layout
		pnlTablaContenido = new VerticalLayout();
		pnlTablaContenido.setImmediate(false);
		pnlTablaContenido.setWidth("-1px");
		pnlTablaContenido.setHeight("-1px");
		pnlTablaContenido.setMargin(false);
		
		// lblFiltroEntidad
		lblFiltroEntidad = new Label();
		lblFiltroEntidad.setStyleName("h2");
		lblFiltroEntidad.setImmediate(false);
		lblFiltroEntidad.setWidth("650px");
		lblFiltroEntidad.setHeight("-1px");
		lblFiltroEntidad.setValue("Filtro de Entidades");
		pnlTablaContenido.addComponent(lblFiltroEntidad);
		
		// pnlFiltroTablaEntidad
		pnlFiltroTablaEntidad = buildPnlFiltroTablaEntidad();
		pnlTablaContenido.addComponent(pnlFiltroTablaEntidad);
		
		// pnlTablaEntidad
		pnlTablaEntidad = buildPnlTablaEntidad();
		pnlTablaContenido.addComponent(pnlTablaEntidad);
		
		return pnlTablaContenido;
	}

	@AutoGenerated
	private HorizontalLayout buildPnlFiltroTablaEntidad() {
		// common part: create layout
		pnlFiltroTablaEntidad = new HorizontalLayout();
		pnlFiltroTablaEntidad.setImmediate(false);
		pnlFiltroTablaEntidad.setWidth("-1px");
		pnlFiltroTablaEntidad.setHeight("-1px");
		pnlFiltroTablaEntidad.setMargin(false);
		
		// txtFiltroTipo
		txtFiltroTipo = new TextField();
		txtFiltroTipo.setImmediate(false);
		txtFiltroTipo.setWidth("85px");
		txtFiltroTipo.setHeight("-1px");
		txtFiltroTipo.setInputPrompt("Tipo");
		pnlFiltroTablaEntidad.addComponent(txtFiltroTipo);
		
		// txtFiltroNombre
		txtFiltroNombre = new TextField();
		txtFiltroNombre.setImmediate(false);
		txtFiltroNombre.setWidth("165px");
		txtFiltroNombre.setHeight("-1px");
		txtFiltroNombre.setInputPrompt("Nombre de entidad");
		pnlFiltroTablaEntidad.addComponent(txtFiltroNombre);
		
		// txtFiltroDistrito
		txtFiltroDistrito = new TextField();
		txtFiltroDistrito.setImmediate(false);
		txtFiltroDistrito.setWidth("145px");
		txtFiltroDistrito.setHeight("-1px");
		txtFiltroDistrito.setInputPrompt("Distrito");
		pnlFiltroTablaEntidad.addComponent(txtFiltroDistrito);
		
		// txtFiltroDireccion
		txtFiltroDireccion = new TextField();
		txtFiltroDireccion.setImmediate(false);
		txtFiltroDireccion.setWidth("115px");
		txtFiltroDireccion.setHeight("-1px");
		txtFiltroDireccion.setInputPrompt("Dirección");
		pnlFiltroTablaEntidad.addComponent(txtFiltroDireccion);
		
		// txtFiltroTelefono
		txtFiltroTelefono = new TextField();
		txtFiltroTelefono.setImmediate(false);
		txtFiltroTelefono.setWidth("117px");
		txtFiltroTelefono.setHeight("-1px");
		txtFiltroTelefono.setInputPrompt("Teléfono");
		pnlFiltroTablaEntidad.addComponent(txtFiltroTelefono);
		
		return pnlFiltroTablaEntidad;
	}

	@AutoGenerated
	private VerticalLayout buildPnlTablaEntidad() {
		// common part: create layout
		pnlTablaEntidad = new VerticalLayout();
		pnlTablaEntidad.setImmediate(false);
		pnlTablaEntidad.setWidth("-1px");
		pnlTablaEntidad.setHeight("410px");
		pnlTablaEntidad.setMargin(false);
		
		// tblEntidad
		tblEntidad = new Table();
		tblEntidad.setImmediate(false);
		tblEntidad.setWidth("640px");
		tblEntidad.setHeight("370px");
		pnlTablaEntidad.addComponent(tblEntidad);
		
		return pnlTablaEntidad;
	}

	@AutoGenerated
	private VerticalLayout buildPnlParametroContenido() {
		// common part: create layout
		pnlParametroContenido = new VerticalLayout();
		pnlParametroContenido.setImmediate(false);
		pnlParametroContenido.setWidth("250px");
		pnlParametroContenido.setHeight("-1px");
		pnlParametroContenido.setMargin(false);
		pnlParametroContenido.setSpacing(true);
		
		// lblEntidad
		lblEntidad = new Label();
		lblEntidad.setStyleName("h2");
		lblEntidad.setImmediate(false);
		lblEntidad.setWidth("-1px");
		lblEntidad.setHeight("-1px");
		lblEntidad.setValue("Administración de Entidad");
		pnlParametroContenido.addComponent(lblEntidad);
		
		// cmbTipoEntidad
		cmbTipoEntidad = new ComboBoxLOVS();
		cmbTipoEntidad.setCaption("Tipo");
		cmbTipoEntidad.setImmediate(false);
		cmbTipoEntidad.setWidth("-1px");
		cmbTipoEntidad.setHeight("-1px");
		pnlParametroContenido.addComponent(cmbTipoEntidad);
		
		// txtNombreEntidad
		txtNombreEntidad = new TextField();
		txtNombreEntidad.setCaption("Nombre");
		txtNombreEntidad.setImmediate(false);
		txtNombreEntidad.setWidth("230px");
		txtNombreEntidad.setHeight("-1px");
		txtNombreEntidad.setRequired(true);
		txtNombreEntidad.setInputPrompt("Nombre");
		pnlParametroContenido.addComponent(txtNombreEntidad);
		
		// cmbDireccionEntidad
		cmbDireccionEntidad = new ComboBox();
		cmbDireccionEntidad.setCaption("Distrito");
		cmbDireccionEntidad.setImmediate(false);
		cmbDireccionEntidad.setWidth("230px");
		cmbDireccionEntidad.setHeight("-1px");
		pnlParametroContenido.addComponent(cmbDireccionEntidad);
		
		// txtDireccionEntidad
		txtDireccionEntidad = new TextField();
		txtDireccionEntidad.setCaption("Dirección");
		txtDireccionEntidad.setImmediate(false);
		txtDireccionEntidad.setWidth("230px");
		txtDireccionEntidad.setHeight("-1px");
		txtDireccionEntidad.setInputPrompt("Dirección");
		pnlParametroContenido.addComponent(txtDireccionEntidad);
		
		// txtADescripcionEntidad
		txtADescripcionEntidad = new TextArea();
		txtADescripcionEntidad.setCaption("Descripción");
		txtADescripcionEntidad.setImmediate(false);
		txtADescripcionEntidad.setWidth("210px");
		txtADescripcionEntidad.setHeight("-1px");
		txtADescripcionEntidad.setInputPrompt("Descripción");
		pnlParametroContenido.addComponent(txtADescripcionEntidad);
		
		// txtTelefonoEntidad
		txtTelefonoEntidad = new TextField();
		txtTelefonoEntidad.setCaption("Teléfono");
		txtTelefonoEntidad.setImmediate(false);
		txtTelefonoEntidad.setWidth("210px");
		txtTelefonoEntidad.setHeight("-1px");
		txtTelefonoEntidad.setInputPrompt("Teléfono");
		pnlParametroContenido.addComponent(txtTelefonoEntidad);
		
		// cmbEstadoEntidad
		cmbEstadoEntidad = new ComboBoxLOVS();
		cmbEstadoEntidad.setCaption("Estado");
		cmbEstadoEntidad.setImmediate(false);
		cmbEstadoEntidad.setWidth("-1px");
		cmbEstadoEntidad.setHeight("-1px");
		pnlParametroContenido.addComponent(cmbEstadoEntidad);
		
		// pnlBotonContenido
		pnlBotonContenido = buildPnlBotonContenido();
		pnlParametroContenido.addComponent(pnlBotonContenido);
		
		return pnlParametroContenido;
	}

	@AutoGenerated
	private HorizontalLayout buildPnlBotonContenido() {
		// common part: create layout
		pnlBotonContenido = new HorizontalLayout();
		pnlBotonContenido.setImmediate(false);
		pnlBotonContenido.setWidth("220px");
		pnlBotonContenido.setHeight("-1px");
		pnlBotonContenido.setMargin(false);
		pnlBotonContenido.setSpacing(true);
		
		// btnCrearEntidad
		btnCrearEntidad = new Button();
		btnCrearEntidad.setCaption("Crear");
		btnCrearEntidad.setImmediate(true);
		btnCrearEntidad.setWidth("-1px");
		btnCrearEntidad.setHeight("-1px");
		pnlBotonContenido.addComponent(btnCrearEntidad);
		pnlBotonContenido.setComponentAlignment(btnCrearEntidad, new Alignment(
				20));
		
		// btnEliminarEntidad
		btnEliminarEntidad = new Button();
		btnEliminarEntidad.setCaption("Eliminar");
		btnEliminarEntidad.setImmediate(true);
		btnEliminarEntidad.setWidth("-1px");
		btnEliminarEntidad.setHeight("-1px");
		pnlBotonContenido.addComponent(btnEliminarEntidad);
		pnlBotonContenido.setComponentAlignment(btnEliminarEntidad,
				new Alignment(20));
		
		return pnlBotonContenido;
	}

}
